package com.lzw.breezeNovel.webApp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author 清风明月
 * @Package com.lzw.breezeNovel.webApp.config
 * @date 2025/3/4
 * @description 自定义线程池
 */
@Component
@SuppressWarnings("all")
public class Executor {

    /**
     * 动态获取服务器核数，创建自定义线程池
     * @return 自定义线程池实例
     */
    @Bean(name = "customThreadPoolExecutor")
    public ThreadPoolExecutor customThreadPoolExecutor() {
        // 动态获取服务器核数
        int processors = Runtime.getRuntime().availableProcessors();
        // 创建线程池
        return new ThreadPoolExecutor(
                processors + 1, // 核心线程个数，对于 CPU 密集型任务，通常设置为 n + 1，n 为内核数量
                processors + 1, // 最大线程个数
                0, // 线程空闲时间
                TimeUnit.SECONDS, // 时间单位
                new ArrayBlockingQueue<>(10), // 任务队列
                Executors.defaultThreadFactory(), // 线程工厂
                new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );
    }
}
